/*
 * Copyright 2008-2009 the original author or authors.
 *
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 *      http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */
package net.hasor.rsf;

import java.io.IOException;
import java.util.Map;
import net.hasor.core.Settings;

/**
 * RSF 配置。
 *
 * @author 赵永春(zyc@hasor.net)
 * @version : 2014年11月18日
 */
public interface RsfSettings extends Settings {
    /** 获取默认超时时间。 */
    public int getDefaultTimeout();

    /** 获取默认超时时间。 */
    public String getDefaultGroup();

    /** 获取默认超时时间。 */
    public String getDefaultVersion();

    /** 获取默认超时时间。 */
    public String getDefaultSerializeType();

    /** 获取配置的服务器端选项 */
    public RsfOptionSet getServerOption();

    /** 获取配置的客户端选项 */
    public RsfOptionSet getClientOption();

    /** 处理网络IO数据包的线程数 */
    public int getNetworkWorker();

    /** 处理网络监听请求的线程数 */
    public int getNetworkListener();

    /** 处理任务队列的最大大小，作为服务端当队列满了之后所有新进来的请求都会被回应 ChooseOther */
    public int getQueueMaxSize();

    /**
     * the number of threads to keep in the pool, even if they are idle, unless
     * allowCoreThreadTimeOut is set.
     */
    public int getQueueMinPoolSize();

    /** the maximum number of threads to allow in the pool. */
    public int getQueueMaxPoolSize();

    /**
     * (SECONDS),when the number of threads is greater than the core, this is the maximum time that
     * excess idle threads will wait for new tasks before terminating.
     */
    public long getQueueKeepAliveTime();

    /** 客户端请求超时时间 */
    public int getRequestTimeout();

    /** 最大并发请求数 */
    public int getMaximumRequest();

    /** 并发调用请求限制策略，当并发调用达到限制值后的策略（Reject 抛出异常，WaitSecond 等待1秒重试） */
    public SendLimitPolicy getSendLimitPolicy();

    /** 客户端发起一个连接请求所允许的最大耗时（单位毫秒） */
    public int getConnectTimeout();

    /** 获取本地服务绑定地址 */
    public String getBindAddress();

    /** 获取默认传输协议 */
    public String getDefaultProtocol();

    /** 获取本地服务绑定地址 */
    public Map<String, InterAddress> getBindAddressSet();

    // TODO: 17/5/9 by zmyer
    /** 协议和提供者的关系 */
    public Map<String, String> getProtocolHandlerMapping();

    /** 获取网关地址 */
    public Map<String, InterAddress> getGatewaySet();

    /** 获取本机所属单元 */
    public String getUnitName();

    /** 获取地址失效之后，等待重新尝试连接的时间(毫秒)。默认60秒。 */
    public long getInvalidWaitTime();

    /** 自动刷新地址本缓存的时间，默认6分钟。 */
    public long getRefreshCacheTime();

    /** 每次缓存地址本到磁盘时的时间间隔（单位:毫秒）默认:1小时 */
    public long getDiskCacheTimeInterval();

    /** 启用磁盘地址本缓存，在refreshCacheTime期间每隔1小时自动写入一次。（被回收的服务不享受此待遇） */
    public boolean islocalDiskCache();

    /** 应用自动上线 */
    public boolean isAutomaticOnline();

    /** RSF管理控制台监听的端口号（Telnet） */
    public int getConsolePort();

    /** 准许的ip地址列表。 */
    public String[] getConsoleInBoundAddress();

    /** 重新加载Rsf配置 */
    public void refreshRsfConfig() throws IOException;
}